package controller;


import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.List;

import persitance.PersitanceManager;
import bank.Konto;
import bank.Kunde;
import bank.Kunden;
import exception.KontoNichtGefundenException;
import exception.KundeNichtGefundenException;
import exception.KundennummerBereitsVergebenException;

public class BankHandler {

    public static final String PROPERTYNAME_KUNDEN = "kunden";

    private final PropertyChangeSupport changeSupport;
    private final Kunden kunden;


    public BankHandler() {
        changeSupport = new PropertyChangeSupport(this);
        kunden = PersitanceManager.getInstance().getKunden();
        kunden.addPropertyChangeListener(new KundenChangeSupport());
    }

    public Kunde anlegenKunde(String kundenName, int kundenNummer) throws KundennummerBereitsVergebenException {
        return kunden.anlegenKunde(kundenName, kundenNummer);
    }

    public Kunde getKundeByKundenNummer(int aKundenNummer) throws KundeNichtGefundenException {
        return kunden.getKundeByKundenNummer(aKundenNummer);
    }

    public Kunde getKundeByKontoNummer(int aKontoNummer) throws KontoNichtGefundenException {
        return kunden.getKundeByKontoNummer(aKontoNummer);
    }

    public Konto getKontoByKontoNummer(int aKontoNummer) throws KontoNichtGefundenException, KundeNichtGefundenException {
    	return kunden.getKontoByKontoNummer(aKontoNummer);
    }

    public List<Kunde> getKundenListe() {
    	return kunden.getKundenListe();
    }

    public void addPropertyChangeListener(String aPropertyName, PropertyChangeListener aListener) {
        changeSupport.addPropertyChangeListener(aPropertyName, aListener);
    }


    // Inner Classes ***********************************************************

    private class KundenChangeSupport implements PropertyChangeListener {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            changeSupport.firePropertyChange(PROPERTYNAME_KUNDEN, null, getKundenListe());
        }
    }
}
